// 给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。返回删除后的链表的头节点。

// --------------- 测试demo ---------------
function ListNode(x) {
  this.val = x;
  this.next = null;
}
let demo = new ListNode(1);
demo.next = new ListNode(2);
demo.next.next = new ListNode(3);
// --------------- 测试demo ---------------

const deleteNode = (head, value) => {
  // 链表不存在的异常处理
  if (!head) {
    return null;
  }

  let temp = head;
  // previous用于存储当前节点的上一个节点
  let previous = null;

  // 头节点就是要删除的节点时,返回下一个节点
  if (head.val == value) {
    head = head.next;
    return head;
  }

  while (temp.val != value) {
    // 其中temp是当前节点
    // previous是上一个节点
    previous = temp;
    // 让temp指向下一个节点
    temp = temp.next;
  }
  // 上个节点的next指向当前节点的下一个 删除了当前要删除的节点
  previous.next = temp.next;
  return head;
};

// 测试demo  删除前链表是[1,2,3]
deleteNode(demo, 2);
// 删除后成功变成[1,3]
console.log(demo);
